package com.mjf.spark.day06

import org.apache.spark.rdd.RDD
import org.apache.spark.storage.StorageLevel
import org.apache.spark.{SparkConf, SparkContext}

/**
 * 缓存
 *    -cache
 *    -persist
 */
object Spark01_Cache {
  def main(args: Array[String]): Unit = {

    // 创建SparkConf配置文件
    val conf = new SparkConf().setMaster("local[*]").setAppName("Spark01_Cache")
    // 创建SparkContext对象
    val sc = new SparkContext(conf)

    val rdd: RDD[String] = sc.makeRDD(List("hello lucy", "hello jack"), 2)

    val flatMapRDD: RDD[String] = rdd.flatMap(_.split(" "))

    val mapRDD: RDD[(String, Int)] = flatMapRDD.map(
      word => {
        println("**************")
        (word, 1)
      }
    )

    // 打印血缘关系
    println(mapRDD.toDebugString)

    // 对RDD数据进行缓存   底层调用的persist方法，默认缓存在内存中
//    mapRDD.cache()

    // persist可以接收参数，指定缓存的位置
    // 注意：虽然叫持久化，但是当应用程序执行结束之后，缓存的目录也会被删除
    mapRDD.persist(StorageLevel.DISK_ONLY)

    // 触发行动操作
    mapRDD.collect()

    println("------------------------------")

    // 打印血缘关系
    println(mapRDD.toDebugString)
    // 触发行动操作
    mapRDD.collect()

    // 关闭连接
    sc. stop()

  }
}
